home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / LOTTO / ST_LOTTO.BOX / PRINTER / PTGRAPH.ASM < prev    next >
Assembly Source File  |  1998-03-14  |  5KB  |  175 lines

  1. * Druckeranpassung für beliebige Drucker für GFA-BASIC 2.0
  2. * bei Ausgabe mit Lprint, Llist oder OPEN ..."PRN:"
  3. *
  4. * Geschrieben von: Frank Ostrowski, GFA Systemtechnik GmbH
  5. *
  6. * Quelltextformat für GST Macroassembler, kann durch ersetzen von
  7. * section text durch .text und end durch .end an andere Assembler
  8. * angepaßt werden. 
  9. *
  10. * Die Druckeranpassungen, die hiermit erzeugt werden, sind
  11. * frei kopierbar, sofern der Name GFA und der des Anpassenden
  12. * nicht geändert werden. 
  13. *
  14. * Der Programmteil ab subinit wird nach Ausführung gelöscht, so das eine
  15. * Kürzung in diesem Bereich aus Speicherplatzgründen sinnlos ist.
  16. *
  17. *
  18. * Vorschlag für GEMDOS-Patches
  19. * Vor das Ziel des TRAP #1-Vektors eine Kennung ($12348765) schreiben und
  20. * davor den alten Inhalt des TRAP #1-Vektors, so das Patches durch
  21. * wiederholten Aufruf desaktiviert werden. 
  22. *
  23.         section text
  24. kenn:   equ     $12348765
  25. init:   bra     subinit
  26.         dc.l    kenn     ;magic
  27. neugemdos: move.w  (sp),d0
  28.         move.l  usp,a0
  29.         btst    #13,d0          ;Supervisor
  30.         beq.s   neugem1
  31.         lea     6(sp),a0
  32. neugem1: cmp.w   #$40,(a0)+     ;write
  33.         bne.s   normgem         ;nein
  34.         cmp.w   #-3,(a0)+       ;Prn:
  35.         bne.s   normgem         ;nein
  36.         move.l  (a0)+,d1        ;len
  37.         beq.s   normgem
  38.         move.w  d7,-(sp)
  39.         pea     (a1)
  40.         move.l  (a0),a1
  41.         pea     (a1)
  42.         bra.s   neuge7
  43. neuge0: move.b  (a1)+,d0
  44.         bra.s   neugex        ;convert
  45. neuge5: move.b  d0,(a0)+
  46. neuge6  cmp.l   #puffer+80,a0
  47.         blo.s   neuge2
  48.         bsr.s   ausgabe
  49.         tst.b   d7
  50.         bne.s   neuge8        
  51. neuge7: lea     puffer(pc),a0
  52. neuge2: subq.l  #1,d1
  53.         bpl.s   neuge0
  54.         bsr.s   ausgabe
  55. neuge8  suba.l  (sp)+,a1
  56.         tst.b   d7
  57.         bne.s   neuge9
  58.         move.l  a1,d0
  59. neuge9: move.l  (sp)+,a1
  60.         move.w  (sp)+,d7
  61.         rte
  62. ausgabe: pea     (a1)
  63.         move.l  d1,-(sp)
  64.         lea     puffer,a1
  65.         sub.l   a1,a0
  66.         pea     (a1)
  67.         pea     (a0)
  68.         move.w  #-3,-(sp)
  69.         move.w  #$40,-(sp)
  70.         pea     retpc(pc)
  71.         move.w  sr,-(sp)
  72. normgem: jmp     $12345678
  73. oldgem: equ     normgem+2
  74.  
  75. neugex: pea     (a2)
  76.         lea     conv(pc),a2
  77.         clr.w   d7
  78. neux1:  move.b  (a2)+,d7
  79.         bmi.s   neux2   ;nicht konvertieren
  80.         cmp.b   (a2)+,d0
  81.         beq.s   neux9   ;gefunden
  82.         adda.w  d7,a2
  83.         bra.s   neux1
  84. neux2   move.l  (sp)+,a2
  85.         bra.s   neuge5
  86. neux8   move.b  (a2)+,(a0)+
  87. neux9   dbra    d7,neux8
  88.         move.l  (sp)+,a2
  89.         bra.s   neuge6
  90.  
  91. retpc:  addq.l  #4,sp
  92.         cmp.l   (sp)+,d0
  93.         sne     d7
  94.         addq.l  #4,sp
  95.         move.l  (sp)+,d1
  96.         move.l  (sp)+,a1
  97.         rts
  98. * Convertierungstabelle
  99. * Aufbau:
  100. * Länge, Original, Kopie
  101. * Ende: Länge<0
  102. conv:   dc.b    7,'Ä',27,'R',2,$5b,27,'R',0
  103.         dc.b    7,'Ö',27,'R',2,'\',27,'R',0
  104.         dc.b    7,'Ü',27,'R',2,$5d,27,'R',0
  105.         dc.b    7,'ä',27,'R',2,'{',27,'R',0
  106.         dc.b    7,'ö',27,'R',2,'|',27,'R',0
  107.         dc.b    7,'ü',27,'R',2,'}',27,'R',0
  108.         dc.b    7,'ß',27,'R',2,'~',27,'R',0
  109.         dc.b    7,225,27,'R',2,'~',27,'R',0     ;Beta
  110.         dc.b    0,128                           ;ignore code 128
  111.         dc.b    12,'A',27,'K',8,0,$00,$ff,$ff,$cc,$cc,$ff,$ff,0
  112. ;       a fat A
  113.         dc.b    -1       ;den Rest unverändert senden!
  114.  
  115. puffer: equ     init-128
  116. endprog:
  117. subinit: lea     -1,a1
  118.         bsr.s   trapini
  119.         cmp.l   #kenn,-(a0)
  120.         bne.s   doinit
  121.         move.l  -(a0),a1
  122.         bsr.s   trapini
  123.         lea     noinst(pc),a0
  124.         bsr.s   message
  125.         clr.w   -(sp)
  126.         trap    #1
  127.  
  128. doinit: lea     neugemdos(pc),a1
  129.         bsr.s   trapini
  130.         move.l  a0,init
  131.         move.l  a0,oldgem
  132.         lea     inst(pc),a0
  133.         bsr.s   message        
  134.         clr.w   -(sp)           ;kein Fehler
  135.         move.l  #endprog-init+256,-(sp) ;programmlänge+basepage
  136.         move.w  #$31,-(sp)
  137.         trap    #1
  138.  
  139. trapini: pea     (a1)
  140.         move.w  #33,-(sp)
  141.         move.w  #5,-(sp)
  142.         trap    #13
  143.         move.l  d0,a0
  144.         addq.l  #8,sp
  145.         rts
  146.  
  147.  
  148. message pea     (a0)
  149.         lea     text1(pc),a0
  150.         bsr.s   messsub
  151.         move.l  (sp)+,a0
  152.         bsr.s   messsub
  153.         moveq   #-1,d0
  154. wait1   dbra    d0,wait1
  155. wait2   dbra    d0,wait2
  156.         rts
  157. messsub pea     (a0)
  158.         move.w  #9,-(sp)
  159.         trap    #1
  160.         addq.l  #6,sp
  161.         rts
  162.  
  163. text1   dc.b    13,10,'GFA patch for PRN:'
  164.         dc.b    13,10,'1986 GFA Systemtechnik, Frank Ostrowski'
  165.         dc.b    13,10,'PTGRAPH ',0
  166. ;
  167. ; hier sollte der Druckername eingesetzt werden und evtl. der Name des
  168. ; Anpassenden. (z.B. pt KYOCERA F~1010   -   A. Nonym)
  169. ;
  170. noinst  dc.b    'not '
  171. inst    dc.b    'installed',13,10,0
  172.  
  173.         end
  174.  
  175.